# @Filename:    sortSearchCount
# @Author:      王佳伟
# @Time:        2025-04-08 14:13
# @Describe:    排序、搜索和计算函数
import numpy as np

# numpy.sort()
# sort()函数返回输入数组的排序副本。 它有以下参数：
# numpy.sort(a, axis, kind, order)
# 1.	a 要排序的数组
# 2.	axis 沿着它排序数组的轴，如果没有数组会被展开，沿着最后的轴排序
# 3.	kind 默认为'quicksort'（快速排序）
# 4.	order 如果数组包含字段，则是要排序的字段

a = np.array([[3, 7], [9, 1]])
print('我们的数组是：')
print(a)
print('\n')
print('调用 sort() 函数：')
print(np.sort(a))
print('\n')
print('沿轴0排序：')
print(np.sort(a, axis = 0))
print('\n')
# 在sort函数中排序字段
dt = np.dtype([('name', 'S10'), ('age', int)])
a = np.array([("raju", 21), ("anil", 25), ("ravi", 17), ("amar", 27)], dtype=dt)
print('我们的数组是：')
print(a)
print('\n')
print('按name排序：')
print(np.sort(a, order='name'))

print('===============================')

# numpy.argsort()
# numpy.argsort()函数对输入数组沿给定轴执行间接排序，
# 并使用指定排序类型返回数据的索引数组。 这个索引数组用于构造排序后的数组。
x = np.array([3, 1, 2])
print('我们的数组是：')
print(x)
print('\n')
print('对x调用argsort()函数：')
y = np.argsort(x)
print(y)
print('\n')
print('以排序后的顺序重构原数组：')
print(x[y])
print('\n')
'使用循环重构原数组：'
for i in y:
    print(x[i])

print('===============================')

nm = ('raju', 'anil', 'ravi', 'amar')
dv = ('f.y.', 's.y.',  's.y.',  'f.y.')
ind = np.lexsort((dv, nm))
print('调用lexsort()函数')
print(ind)
print('\n')
print('使用这个索引来获取排序后的数据：')
print([nm[i] + ',' + dv[i] for i in ind])

print('===================================')

# numpy.argmax() 和 numpy.argmin()
# 这两个函数分别沿给定轴返回最大和最小元素的索引。

a = np.array([[30, 40, 70], [80, 20, 10], [50, 90, 60]])
print('我们的数组是：')
print(a)
print('\n')
print('调用argmax()函数：')
print(np.argmax(a))
print('\n')
print('展开数组：')
print(a.flatten())
print('\n')
print('沿轴0的最大值索引：')
maxindex = np.argmax(a, axis = 0)
print(maxindex)

print('===================================')

# numpy.nonzero()
# numpy.nonzero()函数返回输入数组中非零元素的索引。
a = np.array([[30, 40, 0], [0, 20, 10], [50, 0, 60]])
print('我们的数组是：')
print(a)
print('\n')
print('调用nonzero()函数：')
print(np.nonzero(a))

print('===================================')

# numpy.where()
# where()函数返回输入数组中满足给定条件的元素的索引。
x = np.arange(9.).reshape(3, 3)
print('我们的数组是：')
print(x)
print('大于3的元素的索引：')
y = np.where(x > 3)
print(y)
print('使用这些索引来获取满足条件的元素：')
print(x[y])

print('===================================')

# numpy.extract()
# extract()函数返回满足任何条件的元素。
x = np.arange(9.).reshape(3, 3)
print('我们的数组是：')
print(x)
# 定义条件
condition = np.mod(x, 2) == 0
print('按元素的条件值：')
print(condition)
print('使用条件提取元素：')
print(np.extract(condition, x))





